﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

////1 3 4 5 7 8组成的6位数
////能被11整除
////最大
//int max_num(int arr[6])
//{
//	int max = 0;
//	for (int i = 0; i < 6; i++)
//	{
//		if (arr[i] > max)
//		{
//			max = arr[i];
//		}
//	}
//	for (int i = 0; i < 6; i++)
//	{
//		if (arr[i] == max)
//		{
//			return i;
//		}
//	}
//}
//
//void tmp_num(int arr[6],int p,int k)
//{
//	int tmp = 0;
//	tmp = arr[p];
//	arr[p] = arr[k];
//	arr[k] = tmp;
//}
//
//int main()
//{
//	int arr[6] = { 1,3,4,5,7,8 };
//	//for (int i = 0; i < 6; i++)
//	//{
//	//	scanf("%d", &arr[i]);//1 3 4 5 7 8
//	//}
//	int c = 0;
//	int a=0,b=0;
//	for (int i = 0; i < 6; i++)
//	{
//		c += arr[i];
//	}
//
//	c = c / 2;
//	
//	a = max_num(arr);
//
//	tmp_num(arr, 0, a);
//
//	int arr1[6] = {0};
//	for (int i = 0; i < 6; i++)
//	{
//		arr1[i] = arr[i];
//	}
//	arr1[0] = 0;
//
//	for (int i = 1; i < 6; i++)
//	{
//		int max=0;
//		max = max_num(arr1);
//		if (arr[a] + max < c)
//		{
//			for (int i = 0; i < 6; i++)
//			{
//				if (arr[i] + arr[a] + max == c)
//				{
//					b = i;
//				}
//			}
//		}
//	}
//	
//	
//
//
//	//for (int i = 0; i < 6; i++)
//	//{
//	//	if (i % 2 == 0)
//	//	{
//	//		a += arr[i];
//	//	}
//	//	if (i % 2 != 0)
//	//	{
//	//		b += arr[i];
//	//	}
//	//}
//	//if (a == 14 && b == 14)
//	//{
//	//	
//	//}
//	
//
//
//	return 0;
//}


//#include <stdio.h>
//int main()
//{
//    int a, b, c, d, e, f;
//    for (a = 8; a > 0; a--)
//        if (a - 2 && a - 6)
//            for (b = 8; b > 0; b--)
//                if (b - a && b - 2 && b - 6)
//                    for (c = 8; c > 0; c--)
//                        if (c - a && c - b && c - 2 && c - 6)
//                            for (d = 8; d > 0; d--)
//                                if (d - a && d - b && d - c && d - 2 && d - 6)
//                                    for (e = 8; e > 0; e--)
//                                        if (e - a && e - b && e - c && e - d && e - 2 && e - 6)
//                                        {
//                                            f = 1 + 3 + 4 + 5 + 7 + 8 - a - b - c - d - e;
//                                            if (a + c + e == b + d + f)
//                                            {
//                                                printf("%d%d%d%d%d%d", a, b, c, d, e, f);
//                                                return 0;
//                                            }
//                                        }
//    return 0;
//}
//

//2
// 
//#include <iostream>
//#include <algorithm>
//using namespace std;
//int main()
//{
//	int a[5] = { 1,2,7,8,9 }, b[4];
//	while (next_permutation(a, a + 5))
//	{
//		for (int i = 0; i < 4; i++)
//		{
//			b[i] = a[i];
//		}
//		int sum = b[0] * 10000 + b[1] * 1000 + b[2] * 100 + b[3] * 10 + 5;
//		if (sum % 75 == 0)
//			cout << b[0] << b[1] << b[2] << b[3] << 5 << endl;
//	}
//	return 0;
//}



//小于200自然数
//被7除余2  被8除余 3   被 9除余 1

//#include<stdio.h>
//
//int main() 
//{
//	for (int i = 0; i <= 200; i++)
//	{
//		if ((i % 7 == 2) && (i % 8 == 3) && (i % 9 == 1))
//			printf("%d", i);
//	}
//
//
//}

//#include<stdio.h>
//
//int main()
//{
//	for (int i = 1; i <=3; i++)
//	{
//		int n = 56*i - 5;
//		if ((n % 7 == 2) && (n % 8 == 3) &&( n % 9 == 1))
//			printf("%d", n);
//	}
//}


//#include<stdio.h>
//
//int main()
//{
//	
//}






////仅由数字3,4,5组成七位数中，相邻数字均不相同的七位数是多少个?
//
//
//#include <stdio.h>
//
//int main() {
//    int count = 0;
//
//    for (int d1 = 3; d1 <= 5; d1++) {
//        for (int d2 = 3; d2 <= 5; d2++) {
//            if (d2 == d1) {
//                continue;
//            }
//            for (int d3 = 3; d3 <= 5; d3++) {
//                if (d3 == d2 ) {
//                    continue;
//                }
//                for (int d4 = 3; d4 <= 5; d4++) {
//                    if (d4 == d3 ) {
//                        continue;
//                    }
//                    for (int d5 = 3; d5 <= 5; d5++) {
//                        if (d5 == d4 ) {
//                            continue;
//                        }
//                        for (int d6 = 3; d6 <= 5; d6++) {
//                            if (d6 == d5 ) {
//                                continue;
//                            }
//                            for (int d7 = 3; d7 <= 5; d7++) {
//                                if (d7 == d6) {
//                                    continue;
//                                }
//                                count++;
//                            }
//                        }
//                    }
//                }
//            }
//        }
//    }
//
//    printf("%d\n", count);
//    return 0;
//}




//////第五题 打印菱形
//
//#include<stdio.h>
//int main()
//{
//	int line = 0;
//	int i = 0;
//	scanf("%d", &line);
//	int num = 0;
//	scanf("%d", &num);
//	
//while(num--)
//{
//	for (i = 0; i < line; i++)
//	{
//		int j = 0;
//		for (j = 0; j < line - 1 - i; j++)
//		{
//			printf(" ");
//		}
//		for (j = 0; j < 2 * i + 1; j++)
//		{
//			printf("*");
//		}
//		printf("\n");
//	}
//
//	for (i = 0; i < line - 1; i++)
//	{
//		int j = 0;
//		for (j = 0; j <= i; j++)
//		{
//			printf(" ");
//		}
//		for (j = 0; j < 2 * (line - 1 - i) - 1; j++)
//		{
//			printf("*");
//		}
//		printf("\n");
//	}
//
//}
//	return 0;
//}



//这是一个古老而又经典的问题。用给定的几种钱币凑成某个钱数，一般而言有多种方式。例如:给定了6种钱币面值为2、5、10、20、50100，用来凑15元，
//可以用5个2元、1个5元,或者3个5元，或者1个5元、1个10元，等等。显然，最少需要2个钱币才能凑成15元。
//你的任务就是，给定若干个互不相同的钱币面值，编程计算，最少需要多少个钱币才能凑成某个给出的钱数。


//#include<stdio.h>
//
//int moneynum(int* M, int money)
//{
//	int i = 0;
//	while (*M >= money)
//	{
//		*M -= money;
//		i++;
//	}
//	return i;
//}
//int main()
//{
//	int M = 0;
//	scanf("%d", &M);
//	int N = 0;
//	int money[6] = { 100,50,20,10,5,2 };
//	int i = 0;
//	for (int i = 0; i < 6; i++)
//	{
//		N += moneynum(&M, money[i]);
//	}
//	printf("%d", N);
//	return 0;
//}


////
////多项式秦九韶算法
//
//


//#include <stdio.h>
//#include<math.h>
//#include<time.h>
//#define MAXN 10
//
//
////秦九韶多项式算法
//double fun1(int n, double* a, double x) {
//
//	int i;
//	double p = a[n];//初始值
//	for (i = n; i > 0; i--) {
//		p = a[i - 1] + x * p;
//	}
//	return p;
//}
//
//int main()
//{
//	double a[MAXN];
//	int i;
//	for (i = 0; i < MAXN; i++) a[i] = i;
//	double p = fun1(MAXN, &a, 1);
//	printf("%.2f", p);
//	return 0;
//}




//#include<stdio.h>
//#include <stdlib.h>
//#define MAX 100
//
//int cmp_int(const void* e1, const void*e2)
//{
//	return *(int*)e2 - *(int*)e1;
//}
//struct su
//{
//	int nums;
//	int  sz;
//};
//
//int main()
//{
//	int arr[MAX] = {-1};
//	printf("请输入个数和数：>");
//	int num;
//	scanf("%d", &num);
//	for (int i = 0; i < num; i++)
//	{
//		scanf("%d", &arr[i]);
//	}
//	//快速排序
//	qsort(arr, num,  sizeof(arr[0]), cmp_int);
//
//	//for (int i = 0; i < num; i++)
//	//{
//	//	printf("%d ", arr[i]);
//	//}
//	int s=0;
//	struct su arr1[MAX];
//	int* p1;
//	int* p2;
//	p1 = &arr[0];
//	p2 = &arr[0];
//	int j = 0;
//	while (p2 != &arr[num - 1])
//	{
//		if (*p1 = *p2)
//		{
//			s++;
//			p2++;
//		}
//		else {
//			arr1[j].nums = *p1;
//			arr1[j].sz = s;
//			s = 0;
//			j++;
//			p1 = p2;
//		}
//	}
//	for(int i)
//
//
//	
//
//
//}



//#include <stdio.h>
//
//#define MAX 100
//
//int main() {
//	int num[MAX];
//	int arr[MAX] = { 0 };
//
//	int n;
//	printf("输入数组的大小：");
//	scanf("%d", &n);
//
//	if (n <= 0 || n > MAX) {
//		printf("无效的数组大小\n");
//		return 1;
//	}
//
//	printf("输入%d个数值，以空格分隔：", n);
//	for (int i = 0; i < n; i++) {
//		scanf("%d", &num[i]);
//	}
//
//	// 统计每个数字的出现次数
//	for (int i = 0; i < n; i++) {
//		arr[num[i]]++;
//	}
//
//	// 找出出现次数最多的数字
//	int max = 0;
//	for (int i = 0; i < MAX; i++) {
//		if (arr[i] > max) {
//			max = arr[i];
//		}
//	}
//
//	// 输出出现次数最多的数字（从大到小）
//	printf("出现次数最多的数字是：");
//	for (int i = MAX - 1; i >= 0; i--) {
//		if (arr[i] == max) {
//			printf("%d ", i);
//		}
//	}
//
//	return 0;
//}




//
//#include <stdio.h>
//
//// 计算阶乘
//long long fac(int n) {
//    if (n == 0 || n == 1) {
//        return 1;
//    }
//    else {
//        return n * fac(n - 1);
//    }
//}
//
//// 计算组合数
//long long com(int n, int r) {
//    return fac(n) / (fac(r) * fac(n - r));
//}
//
//int main() {
//    int total = 52;
//    int size = 13;
//
//    // 计算组合数
//    long long num = com(total, size);
//
//    // 输出结果
//    printf("从%d张牌中取出%d张桥牌的组合数量为：%lld\n", total, size, num);
//
//    return 0;
//}


//#include <stdio.h>
//#include <stdlib.h>
//#include <time.h>
//
//#define TOTAL_CARDS 52
//#define CARDS_IN_HAND 13
//
//void generateRandomHand(int deck[], int handSize) {
//    int i, j, temp, remainingCards = TOTAL_CARDS;
//
//    srand(time(0)); // 设置随机数种子
//
//    // 初始化一副完整的扑克牌
//    for (i = 0; i < TOTAL_CARDS; i++) {
//        deck[i] = i;
//    }
//
//    // 从牌堆中随机抽取13张牌
//    for (i = 0; i < handSize; i++) {
//        j = i + rand() % remainingCards; // 从剩余的牌中随机选择一张
//        // 交换牌堆中第i张和第j张牌的位置
//        temp = deck[i];
//        deck[i] = deck[j];
//        deck[j] = temp;
//        remainingCards--;
//    }
//}
//// 计算组合数
//long long combination(int n, int k) {
//    if (k == 0 || k == n) {
//        return 1;
//    }
//
//    // 动态分配内存
//    long long** C = (long long**)malloc((n + 1) * sizeof(long long*));
//    for (int i = 0; i <= n; ++i) {
//        C[i] = (long long*)malloc((k + 1) * sizeof(long long));
//    }
//
//    for (int i = 0; i <= n; i++) {
//        for (int j = 0; j <= (i < k ? i : k); j++) {
//            if (j == 0 || j == i) {
//                C[i][j] = 1;
//            }
//            else {
//                C[i][j] = C[i - 1][j - 1] + C[i - 1][j];
//            }
//        }
//    }
//
//    // 保存结果并释放内存
//    long long result = C[n][k];
//    for (int i = 0; i <= n; ++i) {
//        free(C[i]);
//    }
//    free(C);
//
//    return result;
//}
//
//
//int main() 
//{
//    int totalCards = 52;
//    int bridgeHandSize = 13;
//
//    // 计算组合数
//    long long numberOfCombinations = combination(totalCards, bridgeHandSize);
//
//    // 输出结果
//    printf("从52张牌中取出13张桥牌组合的可能性为：%lld\n", numberOfCombinations);
//
//
//    int deck[TOTAL_CARDS];
//    int i;
//
//    generateRandomHand(deck, CARDS_IN_HAND);
//
//    printf("随机生成的13张桥牌组合为：\n");
//    for (i = 0; i < CARDS_IN_HAND; i++) {
//        int suit = deck[i] / 13; // 花色
//        int rank = deck[i] % 13; // 点数
//
//        const char* suits[] = { "黑桃", "红心", "方块", "梅花" };
//        const char* ranks[] = { "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A" };
//
//        printf("%s%s ", suits[suit], ranks[rank]);
//    }
//
//    return 0;
//}







//#include <stdio.h>
//#include <string.h>
//#include <ctype.h>
//
//int main() {
//    char words[1000];
//    int total_length = 0, word_count = 0;
//
//    printf("请输入单词，用空格分隔：\n");
//    fgets(words, sizeof(words), stdin);
//
//    // 计算单词数量和总长度
//    char* token = strtok(words, " ");
//    while (token != NULL) {
//        int len = strlen(token);
//        // 如果单词以换行符结尾，去掉换行符
//        if (token[len - 1] == '\n') {
//            token[len - 1] = '\0';
//            len--;
//        }
//        total_length += len;
//        word_count++;
//        token = strtok(NULL, " ");
//    }
//
//    if (word_count > 0) {
//        double average_length = (double)total_length / word_count;
//        printf("这些单词的平均长度是：%.2f\n", average_length);
//    }
//    else {
//        printf("没有输入任何单词。\n");
//    }
//
//    return 0;
//}